package com.wjl.springcloudalibaba.sentinel.gatewaysentinel.handler;

import com.alibaba.cloud.sentinel.rest.SentinelClientHttpResponse;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import org.springframework.http.HttpRequest;
import org.springframework.http.client.ClientHttpRequestExecution;
import org.springframework.http.client.ClientHttpResponse;

import java.util.Arrays;

/**
 * @author wjl
 */
public class HelloBlockHandler {

    /**
     * 注意：这里fallback方法返回值必须和原方法返回值保持一致，否则无法生效。 <br/>
     * 尝试过此处定义为Object，发现无法生效。修改为String后正常。 <br/>
     * 这样想也对，因为如果返回的不是String类型的数据，那么在后面进行类型转换时也会报错的。<br/>
     * <p>
     * 当限流策略生效时回调此方法。
     */
    public static String blockHelloHandler(BlockException e) {
        e.printStackTrace();
        return "it`s blockHelloHandler";
    }

    public static ClientHttpResponse blockEchoHandler(HttpRequest request,
                                                      byte[] body,
                                                      ClientHttpRequestExecution clientHttpRequestExecution,
                                                      BlockException e) {
        e.printStackTrace();
        return new SentinelClientHttpResponse("it`s blockHelloHandler for " + request.getURI() + Arrays.toString(body));
    }


}
